/*
 * @Description: 
 * @Version: 1.0
 * @Autor: lzc
 * @Date: 2021-06-25 09:59:10
 * @LastEditors: lzc
 * @LastEditTime: 2021-07-23 14:35:18
 */
#ifndef _MY_ELCDIF_H
#define _MY_ELCDIF_H

#include <rtthread.h>
#include "MIMXRT1052.h"
#include "core_cm7.h"
#include "MIMXRT1052_features.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用，未经作者许可，不得用于其它任何用途
//ALIENTEK I.MX RT1052开发板
//RGB LCD驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2018/1/4
//版本：V1.0
//版权所有，盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////

#define LCD_BL_PIN    GET_PIN(3,2)
#define LCD_RST_PIN   GET_PIN(2,2)
#define ELCDIF_LED(n) (n ? GPIO_PinWrite(GPIO3, 2, 1) : GPIO_PinWrite(GPIO3, 2, 0)) //RGB LCD背光控制

#define LCD_PIXEL_FORMAT_RAW8 0X00
#define LCD_PIXEL_FORMAT_RGB565 0X01
#define LCD_PIXEL_FORMAT_RGB666 0X02
#define LCD_PIXEL_FORMAT_XRGB8888 0X03
#define LCD_PIXEL_FORMAT_RGB888 0X04

//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430	 //灰色
//GUI颜色

#define DARKBLUE 0X01CF	 //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458	 //灰蓝色
//以上三色为PANEL的颜色

#define LIGHTGREEN 0X841F //浅绿色
//#define LIGHTGRAY        0XEF5B //浅灰色(PANNEL)
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12	 //浅棕蓝色(选择条目的反色)
///////////////////////////////////////////////////////////////////////
//用户修改配置部分:

//定义颜色像素格式,一般用RGB565
#define LCD_PIXFORMAT LCD_PIXEL_FORMAT_RGB565

//LCD帧缓冲区首地址,这里定义在SDRAM里面.
#define LCD_FRAME_BUF_ADDR 0X80200000
//定义一些常用的数据类型短关键字
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;

typedef __IO uint32_t vu32;
typedef __IO uint16_t vu16;
typedef __IO uint8_t vu8;

//LCD LTDC重要参数集
typedef struct
{
	u32 pwidth;		//LCD面板的宽度,固定参数,不随显示方向改变,如果为0,说明没有任何RGB屏接入
	u32 pheight;	//LCD面板的高度,固定参数,不随显示方向改变
	u16 hsw;		//水平同步宽度
	u16 vsw;		//垂直同步宽度
	u16 hbp;		//水平后廊
	u16 vbp;		//垂直后廊
	u16 hfp;		//水平前廊
	u16 vfp;		//垂直前廊
	u8 activelayer; //当前层编号:0/1
	u8 dir;			//0,竖屏;1,横屏;
	u16 width;		//LCD宽度
	u16 height;		//LCD高度
	u32 pixsize;	//每个像素所占字节数
} _elcdif_dev;

extern _elcdif_dev lcdelcdif; //管理LCD LTDC参数

void ELCDIF_Init(void);
void ELCDIF_PinInit(void);
void ELCDIF_Display_Dir(u8 dir);
u16 ELCDIF_PanelID_Read(void);
void ELCDIF_ClockInit(u8 loopdiv, u8 postdiv, u8 lcdif1prediv, u8 lcdif1div);
void ELCDIF_Draw_Point(u16 x, u16 y, u32 color);
u32 ELCDIF_Read_Point(u16 x, u16 y);
void ELCDIF_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u32 color);
void ELCDIF_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color);
void ELCDIF_Clear(u32 color);
void ELCDIF_Switch(u8 sw);
void my_lcd_init(void);
#endif
